﻿using System;
using System.Linq;
using Monitor.Repository.DataRepository.LinqModel;
namespace Monitor.Repository.Development
{
    #region вспомогательные классы


    [Serializable]
    public class CoordGPS
    {
        public double? latitude { get; set; }
        public double? longitude { get; set; }
       // public double? course { get; set; }
       // public double? sog { get; set; }
       // public double? hmet { get; set; }
       // public double? hgeo { get; set; }
        //public Int64? hdop { get; set; }
    }

    public class FixedDataValue
    {
        public decimal Value { get; set; }
        public Classif Classif { get; set; }
    }

    #endregion

    public static class ObjectDevelopment
    {
        #region константы

        private static Int64[] ListOfCanId = new long[]
                                                 {
                                                     20010000002,
                                                     20010000003,
                                                     20010000004,
                                                     20010000005,
                                                     20010000006,
                                                     20010000007
                                                 };

        #endregion

        #region where T : RowGPS

        #region извлечь значения для текущего интервала

        public static FixedDataValue GetMesuring<T>(this T obj, long id) where T : RegDataRow
        {
            if (ListOfCanId.Contains(id) && obj.DataFromCAN.Any())
            {
                RowCAN query = obj.DataFromCAN.FirstOrDefault(n => n.ParamId == id);
                if (query != null)
                {
                    FixedDataValue result = new FixedDataValue()
                    {
                        Value = query.Value,
                        Classif = query.ParamClassif
                    };
                    return result;
                }
            }
            return null;
        }


        #endregion

        #region извлечение координат

        public static CoordGPS GetCoord<T>(this T obj) where T : RowGPS
        {
            if (!string.IsNullOrEmpty(obj.Coord))
            {
                return ServiceStack.Text.JsonSerializer.DeserializeFromString<CoordGPS>(obj.Coord);
            }
            return null;
        }

        #endregion

        #endregion

        #region where T : Car

        #region извлечение координат

        public static string CarName<T>(this T obj) where T : Car
        {
            return obj.ClassifType.Name+" "+obj.SerialNumber.Substring(obj.SerialNumber.Length - 5);
        }

        #endregion

        #endregion

    }
}